#include<bits/stdc++.h>
using namespace std;
int n,k,r,dep[1500006],d[1500006],f[1500006],u[1500006],v[1500006],o,vv[1500006];
vector<int>e[1500006];
void dfs(int x,int fa){
	dep[x]=dep[f[x]=fa]+1;
	if(dep[x]>o) r=x,o=dep[x];
	u[x]=1;
	if(dep[x]%k==0) v[x]=0;
	else v[x]=1e9;
	for(int i:e[x]){
		if(i==fa) continue;
		dfs(i,x);
		u[x]=max(u[x],u[i]+1);
		v[x]=min(v[x],v[i]+1);
	}
	if(dep[x]%k==0) u[x]=0;
}
bool slv(int x){
	dep[0]=-1;
	dfs(x,0);
	for(int i=1;i<=n;i++) if(dep[i]%k==0) vv[i]=1;
	for(int i=1;i<=n;i++){
		if(dep[i]%k==0) continue;
		int A=0,B=0,C=0;
		auto ck=[&](int v){
			if(B) C=v;
			else if(A) B=v;
			else A=v;
		};
		for(int j:e[i]){
			if(j==f[i]) ck(dep[i]%k);
			else ck(u[j]+1);
		} 
		bool oo=0;
		if(B) if(A+B>k) oo=1;
		if(C){
			if(B+C>k) oo=1;
			if(A+C>k) oo=1;
		}
		if(oo){
			return 0;
		}
		A=0,B=0,C=0;
		for(int j:e[i]){
			if(j==f[i]) ck(dep[i]%k);
			else if(v[j]<=n) ck(v[j]+1);
		} 
		bool ooo=0;
		if(B) if(A+B<k) ooo=1;
		if(C){
			if(B+C<k) ooo=1;
			if(A+C<k) ooo=1;
		}
		if(ooo){
			return 0;
		}
	}
	return 1;
}
int main(){
	freopen("life.in","r",stdin);
	freopen("life.out","w",stdout);
	cin>>n>>k;
	for(int i=1,j,l;i<n;i++){
		scanf("%d %d",&j,&l);
		e[j].push_back(l);
		e[l].push_back(j);
	}
	dfs(1,0);
	o=0;
	dfs(r,0);
	if(dep[r]<k){
		puts("YES");
		int ans=1;
		for(int i=1;i<=n;i++) ans=ans*2%1000000007;
		cout<<ans;
		return 0;
	}
	if(dep[r]==n){
		puts("YES");
		cout<<k<<"\n";
		return 0;
	}
	for(int i=1;i<=k;i++) d[i]=r,r=f[r];
	int ans=0;
	for(int i=1;i<=k;i++) ans+=slv(d[i]);
	puts(ans?"YES":"NO");
	for(int i=1;i<=n;i++) if(!vv[i]) ans=ans*2%1000000007;
	cout<<ans;
	return 0;
}
